/**
 * 统计指定目录中文件总大小.
 * 要考虑目录中还有子目录的情况. 可以同步编码, 异步更好.
 */
const fs = require('fs').promises
const path = require('path')
const { promisify } = require('util')

// 存放总大小
let totalSize = 0

/**
 *
 * @param {*} url 父节路径
 * @param {*} need 是否需要拼接父级路径
 */
async function calc(url, need = true) {
  // 获取文件的绝对路径
  let absPath = path.join(need ? __dirname : '', url)
  // 获取路径信息
  let statInfo = await fs.stat(absPath)
  // 是否是文件
  const isFile = statInfo.isFile()
  if (isFile) {
    // 如果是文件,直接累加 size
    totalSize += statInfo.size
  } else {
    // 如果是目录, 获取目录信息
    const dirs = await fs.readdir(absPath)

    dirs.forEach((item) => {
      calc(path.join(absPath, item), false)
    })
  }
}

calc('test')
setTimeout(() => {
  console.info((totalSize / 1024).toFixed(2), 'KB')
}, 11)
